package com.example.gulimall.common.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @Description: 自定义注解规则
 * @Created: with IntelliJ IDEA.
 * @author: 夏沫止水
 * @createTime: 2020-05-27 17:48
 **/

//@Documented
//@Constraint(validatedBy = { ListValueConstraintValidator.class })
//@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
//@Retention(RUNTIME)
//public @interface ListValue {
//
//    String message() default "{com.example.gulimall.common.valid.ListValue.message}";
//
//    Class<?>[] groups() default { };
//
//    Class<? extends Payload>[] payload() default { };
//
//    int[] vals() default { };
//
//}
//表示该注解应该被 javadoc 工具记录，因此可以被文档化
@Documented
//指定了该注解应该由哪些类执行验证逻辑。在这里，validatedBy = {} 表示没有特定的验证类，因为数组为空
@Constraint(validatedBy = {ListValueConstraintValidator.class})
//可以使用该注解的目标元素类型，例如方法、字段、注解类型
@Target({METHOD, FIELD,ANNOTATION_TYPE})
//注解在运行时保留。这允许在运行时通过反射来获取有关注解的信息。
@Retention(RUNTIME)
public @interface ListValue {
    //指定验证失败时的默认提示消息
    String message() default "{com.example.gulimall.common.valid.ListValue.message}";
    //用于指定验证分组
    Class<?>[] groups() default { };
    //用于在验证过程中携带一些额外的信息
    Class<? extends Payload>[] payload() default { };

    int[] vals() default { };

}
